// function sum(x: number, y: number): number {
//   return x + y
// }
// const sum: (x: number, y: number) => number = function (
//   x: number,
//   y: number
// ): number {
//   return x + y
// }
// const sum = (x: number, y: number): number => {
//   return x + y
// }

// interface Ifun {
//   (x: number, y: number): number
// }
// const sum: Ifun = (x: number, y: number): number => {
//   return x + y
// }

// 可选参数: y现在就是可选参数
// 注意: 可选参数应该在后面
// function sum(x: number, y?: number, z?: number): number {
//   return x + y + z
// }

// sum(1)

// 参数的默认值.有了默认值就可以不传参数了,但是写了默认值不代表他就是可选参数
// function sum(x: number = 1, y?: number, z: number = 3): number {
//   return x + y + z
// }

// sum(1)

// 剩余参数(就是数组)
// function sum(x, ...args) {
//   let test: number[] = args
// }

// sum(1, 2, 3, 4, 5)
function reverse(x: number): number
function reverse(x: string): string
function reverse(x: number | string): number | string {
  if (typeof x === 'number') {
    return Number(x.toString().split('').reverse().join(''))
  } else if (typeof x === 'string') {
    return x.split('').reverse().join('')
  }
}

reverse('abc').
